/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.modules.financial.service.declarationnotice;

import com.jeesite.common.entity.Page;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.custom.service.CodeRuleService;
import com.jeesite.modules.file.utils.FileUploadUtils;
import com.jeesite.modules.financial.dao.declarationnotice.TdeclarationNoticeDao;
import com.jeesite.modules.financial.dao.declarationnotice.TdeclarationNoticeDetailDao;
import com.jeesite.modules.financial.dao.declarationnotice.TdeclarationNoticeListDao;
import com.jeesite.modules.financial.entity.declarationnotice.TdeclarationNotice;
import com.jeesite.modules.financial.entity.declarationnotice.TdeclarationNoticeDetail;
import com.jeesite.modules.financial.entity.declarationnotice.TdeclarationNoticeList;
import com.jeesite.modules.sys.utils.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 报关通知Service
 *
 * @author shengbin
 * @version 2021-03-05
 */
@Service
@Transactional(readOnly = true)
public class TdeclarationNoticeService extends CrudService<TdeclarationNoticeDao, TdeclarationNotice> {

    @Autowired
    private TdeclarationNoticeListDao tdeclarationNoticeListDao;
    @Autowired
    private CodeRuleService codeRuleService;
    @Autowired
    private TdeclarationNoticeDetailDao tdeclarationNoticeDetailDao;

    /**
     * 获取单条数据
     *
     * @param tdeclarationNotice
     * @return
     */
    @Override
    public TdeclarationNotice get(TdeclarationNotice tdeclarationNotice) {
        TdeclarationNotice entity = super.get(tdeclarationNotice);
        if (entity != null) {
            TdeclarationNoticeList tdeclarationNoticeList = new TdeclarationNoticeList(entity);
            tdeclarationNoticeList.setStatus(TdeclarationNoticeList.STATUS_NORMAL);
            entity.setTdeclarationNoticeListList(tdeclarationNoticeListDao.findList(tdeclarationNoticeList));
            TdeclarationNoticeDetail tdeclarationNoticeDetail = new TdeclarationNoticeDetail(entity);
            tdeclarationNoticeDetail.setStatus(TdeclarationNoticeDetail.STATUS_NORMAL);
            entity.setTdeclarationNoticeDetailList(tdeclarationNoticeDetailDao.findList(tdeclarationNoticeDetail));
        }
        return entity;
    }

    /**
     * 查询分页数据
     *
     * @param tdeclarationNotice      查询条件
     * @param tdeclarationNotice.page 分页对象
     * @return
     */
    @Override
    public Page<TdeclarationNotice> findPage(TdeclarationNotice tdeclarationNotice) {
        return super.findPage(tdeclarationNotice);
    }

    /**
     * 保存数据（插入或更新）
     *
     * @param tdeclarationNotice
     */
    @Override
    @Transactional(readOnly = false)
    public void save(TdeclarationNotice tdeclarationNotice) {
        if (tdeclarationNotice.getIsNewRecord()) {
            tdeclarationNotice.setCustomsDeclarationNoticeCode(codeRuleService.getCode("CustomsDeclarationNotice"));
            tdeclarationNotice.setCreateBy(UserUtils.getUser().getUserCode());
            tdeclarationNotice.setUpdateBy(UserUtils.getUser().getUserCode());
        }else {
            tdeclarationNotice.setUpdateBy(UserUtils.getUser().getUserCode());
        }
        super.save(tdeclarationNotice);
        if (tdeclarationNotice.getIsNewRecord()) {
            codeRuleService.updateCurrentNumber("CustomsDeclarationNotice");
        }
        // 保存上传图片
        FileUploadUtils.saveFileUpload(tdeclarationNotice.getId(), "tdeclarationNotice_image");
        // 保存上传附件
        FileUploadUtils.saveFileUpload(tdeclarationNotice.getId(), "tdeclarationNotice_file");
        // 保存 TdeclarationNotice子表
        for (TdeclarationNoticeList tdeclarationNoticeList : tdeclarationNotice.getTdeclarationNoticeListList()) {
            if (!TdeclarationNoticeList.STATUS_DELETE.equals(tdeclarationNoticeList.getStatus())) {
                tdeclarationNoticeList.setCustomsDeclarationNoticeId(tdeclarationNotice);
                if (tdeclarationNoticeList.getIsNewRecord()) {
                    tdeclarationNoticeListDao.insert(tdeclarationNoticeList);
                } else {
                    tdeclarationNoticeListDao.update(tdeclarationNoticeList);
                }
            } else {
                tdeclarationNoticeListDao.delete(tdeclarationNoticeList);
            }
        }
        // 保存 TdeclarationNotice子表
        for (TdeclarationNoticeDetail tdeclarationNoticeDetail : tdeclarationNotice.getTdeclarationNoticeDetailList()) {
            if (!TdeclarationNoticeDetail.STATUS_DELETE.equals(tdeclarationNoticeDetail.getStatus())) {
                tdeclarationNoticeDetail.setCustomsDeclarationNoticeId(tdeclarationNotice);
                if (tdeclarationNoticeDetail.getIsNewRecord()) {
                    tdeclarationNoticeDetailDao.insert(tdeclarationNoticeDetail);
                } else {
                    tdeclarationNoticeDetailDao.update(tdeclarationNoticeDetail);
                }
            } else {
                tdeclarationNoticeDetailDao.delete(tdeclarationNoticeDetail);
            }
        }
    }

    /**
     * 更新状态
     *
     * @param tdeclarationNotice
     */
    @Override
    @Transactional(readOnly = false)
    public void updateStatus(TdeclarationNotice tdeclarationNotice) {
        super.updateStatus(tdeclarationNotice);
    }

    /**
     * 删除数据
     *
     * @param tdeclarationNotice
     */
    @Override
    @Transactional(readOnly = false)
    public void delete(TdeclarationNotice tdeclarationNotice) {
        super.delete(tdeclarationNotice);
        TdeclarationNoticeList tdeclarationNoticeList = new TdeclarationNoticeList();
        tdeclarationNoticeList.setCustomsDeclarationNoticeId(tdeclarationNotice);
        tdeclarationNoticeListDao.deleteByEntity(tdeclarationNoticeList);
        TdeclarationNoticeDetail tdeclarationNoticeDetail = new TdeclarationNoticeDetail();
        tdeclarationNoticeDetail.setCustomsDeclarationNoticeId(tdeclarationNotice);
        tdeclarationNoticeDetailDao.deleteByEntity(tdeclarationNoticeDetail);
    }

}